// components/phoneInput/phoneInput.js
const app = getApp()

Component({
  options: {
    styleIsolation: 'apply-shared'
  },

  /**
   * 组件的属性列表
   */
  properties: {
    value: {
      type: String,
      value: ''
    }
  },

  /**
   * 组件的初始数据
   */
  data: {
    result: '',
    phone: '',
    code: '',
    countdown: 0,
    showDialog: false,
    tipsType: '',
    tipsMsg: ''
  },

  observers: {
    'value': function (value) {
      this.setData({ result: value })
    }
  },

  /**
   * 组件的方法列表
   */
  methods: {
    /**
     * 显示手机号码输入弹框
     */
    bindShowDialog () {
      this.setData({ showDialog: true })
    },

    /**
     * 输入手机号码
     * @param {Event} e 
     */
    bindInputPhone (e) {
      const value = e.detail.value
      if (value.length === 11 || this.data.phone.length === 11) {
        this.setData({ phone: value })
      } else {
        this.data.phone = value
      }
    },

    /**
     * 输入验证码
     * @param {Event} e 
     */
    bindInputCode (e) {
      const value = e.detail.value
      this.data.code = value
    },

    // 验证码计时器
    sendCodeInterval: null,
  
    /**
     * 发送验证码
     * @param {Event} e 
     */
    bindSendCode (e) {
      const _this = this
      const phone = this.data.phone
      if (/^1(3|4|5|6|7|8|9)\d{9}$/.test(phone)) {
        // 倒计时
        let countdown = 120
        _this.setData({ countdown })
        _this.sendCodeInterval = setInterval(() => {
          if (countdown > 0) {
            --countdown
            _this.setData({ countdown })
          } else {
            clearInterval(_this.sendCodeInterval)
            _this.sendCodeInterval = null
            _this.setData({ countdown: 0 })
          }
        }, 1000)
        // 后台发送验证码
        wx.cloud.callFunction({
          name: 'sendCode',
          data: { phone },
          // success (res) {
          //   let { code, message } = res.result;
          //   if (code === 0) {
              
          //   } else {
          //     _this.setData({
          //       tipsType: 'error',
          //       tipsMsg: message
          //     })
          //   }
          // }, fail (err) {
          //   _this.setData({
          //     tipsType: 'error',
          //     tipsMsg: '发送失败'
          //   })
          // }
        })
      } else {
        this.setData({
          tipsType: 'info',
          tipsMsg: '请输入正确的手机号码！'
        })
      }
    },

    /**
     * 点击按钮确定或取消
     */
    bindDialogButton (event) {
      const index = event.detail.index
      if (index === 1) {
        // 确定
        const phone = this.data.phone
        const code = this.data.code
        if (!/^1(3|4|5|6|7|8|9)\d{9}$/.test(phone)) {
          this.setData({
            tipsType: 'info',
            tipsMsg: '请输入正确的手机号码！'
          })
        } else if (code.length < 6) {
          this.setData({
            tipsType: 'info',
            tipsMsg: '请输入6位验证码！'
          })
        } else {
          this.checkCode(phone, code)
        }
      } else {
        // 取消
        this.setData({ showDialog: false })
      }
    },

    /**
     * 后台验证手机号码
     * @param {String} phone 手机号码
     * @param {String} code 验证码
     */
    checkCode (phone, code) {
      const _this = this
      wx.cloud.callFunction({
        name: 'checkCode',
        data: { phone, code },
        success (res) {
          let { code, message } = res.result;
          if (code === 0) {
            _this.setData({
              tipsType: 'success',
              tipsMsg: message,
              phone: '',
              code: '',
              result: phone,
              showDialog: false
            })
            // 更新全局参数phone
            app.global.phone = phone
            // 向父级组件传递值
            _this.triggerEvent('change', { value: phone })
          } else {
            _this.setData({
              tipsType: 'error',
              tipsMsg: message,
              code: '',
            })
          }
        }
      })
    }

  }
})
